#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>


int main()
{
    extern char** environ;
    putenv("PRIVATE_ENV=123");
    pid_t id = fork();
    if(id == 0)
    {
        //char* const myargv[] = 
        //{
        //    "ls",
        //    "-a",
        //    "-l",
        //    NULL
        //};
        
        char* const myenv[] = 
        {
            "MY_VALUE=954",
            "DATE=2024/5/27",
            NULL
        };

        printf("before: I am a process, pid: %d, ppid: %d\n", getpid(), getppid());
        //sleep(1);

        // 标准写法
        //execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
        //execlp("ls", "ls", "-a", "-l", NULL);

        //execv("/usr/bin/ls", myargv);
        //execvp("ls", myargv);
       
        // 无论是可执行程序，还是脚本，亦或是能够跨平台调用
        // 所有语言运行起来，本质都是进程！
        execle("./otherExe", "otherExe", "-a", "-b", "-c", NULL, myenv);
        //execl("/usr/bin/bash", "bash", "test.sh", NULL);
        //execl("/usr/bin/python3", "python3", "test.py", NULL);

        printf("after: I am a process, pid: %d, ppid: %d\n", getpid(), getppid());
        exit(0);
    }
    pid_t ret = waitpid(id, NULL, 0);
    if(ret > 0)
        printf("wait success, father pid: %d, ret id: %d\n", getpid(), ret);

    //sleep(3);
    return 0;
}
